var request = require('request');
var fs = require('fs');

var provinceList = [
	'广东省',
	// '北京市',
	// '天津市',
	// '河北省',
	// '山西省',
	// '内蒙古自治区',
	// '辽宁省',
	// '吉林省',
	// '黑龙江省',
	// '上海市',
	// '江苏省',
	// '浙江省',
	// '安徽省',
	// '福建省',
	// '江西省',
	// '山东省',
	// '河南省',
	// '湖北省',
	// '湖南省',
	// '广西壮族自治区',
	// '海南省',
	// '重庆市',
	// '四川省',
	// '贵州省',
	// '云南省',
	// '西藏自治区',
	// '陕西省',
	// '甘肃省',
	// '青海省',
	// '宁夏回族自治区',
	// '新疆维吾尔自治区',
	// '台灣',
	// '香港特别行政区',
	// '澳门特别行政区'
];

var __key = '9a33d4f370d8b996bcff0a988071ac2e';
var __url = 'http://restapi.amap.com/v3/config/district?subdistrict=3&extensions=all&level=province&key=$key&s=rsv3&output=json&keywords=$province';
var __referer = 'http://www.wzq.info';
var __file = './gd_data.json';
var __saveToDbUrl = 'http://localhost:9200/o2o_test/district';
var __max_save = 10;

function __createOption(province) {
	var url = __url.replace('$key', __key);
	url = url.replace('$province', encodeURIComponent(province));
	var option = {
			referer: __referer,
			url: url
		}
		// console.log(url);
	return option;
}

/**
 cb(err,body)
 */
function __oneProvince(province, cb) {
	console.log('get data :' + province);
	var option = __createOption(province);
	request(option, function(err, res, body) {
		if (err) {
			console.log('####get data fail:' + province);
		} else {
			console.log('----get data succ:' + province);
		}
		if (cb) cb(err, body);
		else console.log(body);
	});
}


// __oneProvince(provinceList[0], function(err, body) {
// 	fs.writeFile(__file, body, function(err) {
// 		if (err) console.log(err);
// 	})
// });


function __parseData(res) {
	var inList = [];
	var outList = [];
	res = JSON.parse(res);
	var districts = res.districts;
	districts.forEach(function(item) {
		inList.push(item);
	});

	while (inList.length > 0) {
		var obj = inList.pop();
	
		var centerA = obj.center.split(',').map(function(item){
			return Number(item);
		});

		var _id = obj.areacode || obj.adcode;
		var out = {
			_id: _id,
			ad_code: obj.adcode,
			area_code: obj.areacode,
			city_code: obj.citycode,
			name: obj.name,
			// center: obj.center.split(','),
			center: centerA,
			pid: obj.pid || null,
			subid: [], // empty 
			level: obj.level, // province / city / district ... 
		};

		var sub = obj.districts;
		if (sub && sub.length > 0) {
			sub.forEach(function(item) {
				item.pid = _id;
				out.subid.push(item.areacode || item.adcode);
				inList.push(item);
			});
		}
		outList.push(out);
	}
	console.log('----parse data succ');
	return outList;
}


function __saveOne(obj, cb) {
	// console.log(obj);
	// return cb(null,null);
	
	request({
		method: 'POST',
		url: __saveToDbUrl + '/' + obj._id,
		json: true,
		headers: {
			"content-type": "application/json",
		},
		body: obj
	}, function(err, res, body) {
		if (err) {
			console.log('#### __saveOne err', err, obj);
		} else {
			// console.log('---saveOne succ');
		}
		if (cb) cb(err, body);
		else console.log('__saveOne', err, body)
	});
}

/**
 * cb(err)
 */
function __saveMany(list, cb) {
	var obj;

	function foo(err, body) {
		// if (err) console.log('############## __saveMany', err);
		if (list.length === 0) {
			console.log('----save many succ');
			return cb(null);
		}

		obj = list.pop();
		__saveOne(obj, foo);
	}

	foo();
}

/**
 cb(err)
*/
function __allProvince(cb) {
	var obj;

	function foo(err, body) {
		if (body) {
			var tmp = __parseData(body);
			__saveMany(tmp, function(err) {
				bar();
			});
		} else {
			bar();
		}
	}

	function bar() {
		if (provinceList.length === 0) return cb(null);
		obj = provinceList.shift();
		console.log('----start province' + obj);
		__oneProvince(obj, foo);
	}

	foo();
}


__allProvince(function(err) {
	console.log('done');
});


// request({
// 	method: 'POST',
// 	// url: __saveToDbUrl,
// 	url: 'http://localhost:9200/o2o_test/district',
// 	json: true,
// 	headers: {
// 		"content-type": "application/json",
// 	},
// 	body: {
// 		"content": "aaaaaaaaaaa发的发生非大法师"
// 	}
// }, function(err, res, body) {
// 	if (err) {
// 		console.log('#### __saveOne err', err, obj);
// 	} else {
// 		// console.log('---saveOne succ');
// 	}
// 	console.log('__saveOne', err, body)
// });